﻿/// <reference path="data.js" />

(function (lightSwitchApplication) {

    var $Screen = msls.Screen,
        $defineScreen = msls._defineScreen,
        $DataServiceQuery = msls.DataServiceQuery,
        $toODataString = msls._toODataString,
        $defineShowScreen = msls._defineShowScreen;

    function Index(parameters, dataWorkspace) {
        /// <summary>
        /// 表示 Index 屏幕。
        /// </summary>
        /// <param name="parameters" type="Array">
        /// 屏幕参数值数组。
        /// </param>
        /// <param name="dataWorkspace" type="msls.application.DataWorkspace" optional="true">
        /// 供此屏幕使用的现有数据工作区。 默认情况下，将创建一个新的数据工作区。
        /// </param>
        /// <field name="GroupSet" type="msls.VisualCollection" elementType="msls.application.Group">
        /// 获取此屏幕的 groupSet。
        /// </field>
        /// <field name="SiteCollection" type="msls.VisualCollection" elementType="msls.application.Site">
        /// 获取此屏幕的 siteCollection。
        /// </field>
        /// <field name="QueryBySiteID" type="msls.VisualCollection" elementType="msls.application.DBInfo">
        /// 获取此屏幕的 queryBySiteID。
        /// </field>
        /// <field name="details" type="msls.application.Index.Details">
        /// 获取此屏幕的详细信息。
        /// </field>
        if (!dataWorkspace) {
            dataWorkspace = new lightSwitchApplication.DataWorkspace();
        }
        $Screen.call(this, dataWorkspace, "Index", parameters);
    }

    function EditGroup(parameters, dataWorkspace) {
        /// <summary>
        /// 表示 EditGroup 屏幕。
        /// </summary>
        /// <param name="parameters" type="Array">
        /// 屏幕参数值数组。
        /// </param>
        /// <param name="dataWorkspace" type="msls.application.DataWorkspace" optional="true">
        /// 供此屏幕使用的现有数据工作区。 默认情况下，将创建一个新的数据工作区。
        /// </param>
        /// <field name="Group" type="msls.application.Group">
        /// 获取或设置此屏幕的 group。
        /// </field>
        /// <field name="SiteCollection" type="msls.VisualCollection" elementType="msls.application.Site">
        /// 获取此屏幕的 siteCollection。
        /// </field>
        /// <field name="details" type="msls.application.EditGroup.Details">
        /// 获取此屏幕的详细信息。
        /// </field>
        if (!dataWorkspace) {
            dataWorkspace = new lightSwitchApplication.DataWorkspace();
        }
        $Screen.call(this, dataWorkspace, "EditGroup", parameters);
    }

    function EditSite(parameters, dataWorkspace) {
        /// <summary>
        /// 表示 EditSite 屏幕。
        /// </summary>
        /// <param name="parameters" type="Array">
        /// 屏幕参数值数组。
        /// </param>
        /// <param name="dataWorkspace" type="msls.application.DataWorkspace" optional="true">
        /// 供此屏幕使用的现有数据工作区。 默认情况下，将创建一个新的数据工作区。
        /// </param>
        /// <field name="Site" type="msls.application.Site">
        /// 获取或设置此屏幕的 site。
        /// </field>
        /// <field name="DBInfoCollection" type="msls.VisualCollection" elementType="msls.application.DBInfo">
        /// 获取此屏幕的 dBInfoCollection。
        /// </field>
        /// <field name="details" type="msls.application.EditSite.Details">
        /// 获取此屏幕的详细信息。
        /// </field>
        if (!dataWorkspace) {
            dataWorkspace = new lightSwitchApplication.DataWorkspace();
        }
        $Screen.call(this, dataWorkspace, "EditSite", parameters);
    }

    function EditDBInfo(parameters, dataWorkspace) {
        /// <summary>
        /// 表示 EditDBInfo 屏幕。
        /// </summary>
        /// <param name="parameters" type="Array">
        /// 屏幕参数值数组。
        /// </param>
        /// <param name="dataWorkspace" type="msls.application.DataWorkspace" optional="true">
        /// 供此屏幕使用的现有数据工作区。 默认情况下，将创建一个新的数据工作区。
        /// </param>
        /// <field name="DBInfo" type="msls.application.DBInfo">
        /// 获取或设置此屏幕的 dBInfo。
        /// </field>
        /// <field name="details" type="msls.application.EditDBInfo.Details">
        /// 获取此屏幕的详细信息。
        /// </field>
        if (!dataWorkspace) {
            dataWorkspace = new lightSwitchApplication.DataWorkspace();
        }
        $Screen.call(this, dataWorkspace, "EditDBInfo", parameters);
    }

    msls._addToNamespace("msls.application", {

        Index: $defineScreen(Index, [
            {
                name: "GroupSet", kind: "collection", elementType: lightSwitchApplication.Group,
                createQuery: function () {
                    return this.dataWorkspace.ApplicationData.GroupSet.orderBy("Order");
                }
            },
            {
                name: "SiteCollection", kind: "collection", elementType: lightSwitchApplication.Site,
                getNavigationProperty: function () {
                    if (this.owner.GroupSet.selectedItem) {
                        return this.owner.GroupSet.selectedItem.details.properties.SiteCollection;
                    }
                    return null;
                },
                appendQuery: function () {
                    return this.orderBy("Order");
                }
            },
            {
                name: "QueryBySiteID", kind: "collection", elementType: lightSwitchApplication.DBInfo,
                createQuery: function (SiteId) {
                    return this.dataWorkspace.ApplicationData.QueryBySiteID(SiteId).filter("" + ((SiteId === undefined || SiteId === null) ? "false" : "(Site/Id eq " + $toODataString(SiteId, "Int32?") + ")") + "").expand("Site");
                }
            }
        ], [
            { name: "deleteGroup" },
            { name: "VisitSite" },
            { name: "DownloadReg" },
            { name: "ShowDownload" }
        ]),

        EditGroup: $defineScreen(EditGroup, [
            { name: "Group", kind: "local", type: lightSwitchApplication.Group },
            {
                name: "SiteCollection", kind: "collection", elementType: lightSwitchApplication.Site,
                getNavigationProperty: function () {
                    if (this.owner.Group) {
                        return this.owner.Group.details.properties.SiteCollection;
                    }
                    return null;
                },
                appendQuery: function () {
                    return this.expand("Group");
                }
            }
        ], [
            { name: "DelectSite" }
        ]),

        EditSite: $defineScreen(EditSite, [
            { name: "Site", kind: "local", type: lightSwitchApplication.Site },
            {
                name: "DBInfoCollection", kind: "collection", elementType: lightSwitchApplication.DBInfo,
                getNavigationProperty: function () {
                    if (this.owner.Site) {
                        return this.owner.Site.details.properties.DBInfoCollection;
                    }
                    return null;
                },
                appendQuery: function () {
                    return this.expand("Site");
                }
            }
        ], [
            { name: "DelectDBInfo" }
        ]),

        EditDBInfo: $defineScreen(EditDBInfo, [
            { name: "DBInfo", kind: "local", type: lightSwitchApplication.DBInfo }
        ], [
        ]),

        showIndex: $defineShowScreen(function showIndex(options) {
            /// <summary>
            /// 异步向前导航到 Index 屏幕。
            /// </summary>
            /// <param name="options" optional="true">
            /// 提供以下一个或多个选项的对象:<br/>- beforeShown: 在应用边界行为之后但在显示屏幕之前调用的函数。<br/>+ Signature: beforeShown(screen)<br/>- afterClosed: 在应用边界行为且关闭屏幕之后调用的函数。<br/>+ Signature: afterClosed(screen, action : msls.NavigateBackAction)
            /// </param>
            /// <returns type="WinJS.Promise" />
            var parameters = Array.prototype.slice.call(arguments, 0, 0);
            return lightSwitchApplication.showScreen("Index", parameters, options);
        }),

        showEditGroup: $defineShowScreen(function showEditGroup(Group, options) {
            /// <summary>
            /// 异步向前导航到 EditGroup 屏幕。
            /// </summary>
            /// <param name="options" optional="true">
            /// 提供以下一个或多个选项的对象:<br/>- beforeShown: 在应用边界行为之后但在显示屏幕之前调用的函数。<br/>+ Signature: beforeShown(screen)<br/>- afterClosed: 在应用边界行为且关闭屏幕之后调用的函数。<br/>+ Signature: afterClosed(screen, action : msls.NavigateBackAction)
            /// </param>
            /// <returns type="WinJS.Promise" />
            var parameters = Array.prototype.slice.call(arguments, 0, 1);
            return lightSwitchApplication.showScreen("EditGroup", parameters, options);
        }),

        showEditSite: $defineShowScreen(function showEditSite(Site, options) {
            /// <summary>
            /// 异步向前导航到 EditSite 屏幕。
            /// </summary>
            /// <param name="options" optional="true">
            /// 提供以下一个或多个选项的对象:<br/>- beforeShown: 在应用边界行为之后但在显示屏幕之前调用的函数。<br/>+ Signature: beforeShown(screen)<br/>- afterClosed: 在应用边界行为且关闭屏幕之后调用的函数。<br/>+ Signature: afterClosed(screen, action : msls.NavigateBackAction)
            /// </param>
            /// <returns type="WinJS.Promise" />
            var parameters = Array.prototype.slice.call(arguments, 0, 1);
            return lightSwitchApplication.showScreen("EditSite", parameters, options);
        }),

        showEditDBInfo: $defineShowScreen(function showEditDBInfo(DBInfo, options) {
            /// <summary>
            /// 异步向前导航到 EditDBInfo 屏幕。
            /// </summary>
            /// <param name="options" optional="true">
            /// 提供以下一个或多个选项的对象:<br/>- beforeShown: 在应用边界行为之后但在显示屏幕之前调用的函数。<br/>+ Signature: beforeShown(screen)<br/>- afterClosed: 在应用边界行为且关闭屏幕之后调用的函数。<br/>+ Signature: afterClosed(screen, action : msls.NavigateBackAction)
            /// </param>
            /// <returns type="WinJS.Promise" />
            var parameters = Array.prototype.slice.call(arguments, 0, 1);
            return lightSwitchApplication.showScreen("EditDBInfo", parameters, options);
        })

    });

}(msls.application));
